1. Что такое парадигмы программирования?
* Ответ: Парадигма программирования — это стиль или подход к написанию программного кода, определяющий способ мышления программиста и структуру программы.
* Примеры из курса: Императивное, декларативное, структурное, процедурное, функциональное, объектно-ориентированное (ООП), аспектно-ориентированное (АОП).
* Суть: В Python можно писать в разных парадигмах. Например, один и тот же факториал можно написать циклом (структурно), рекурсией (процедурно/функционально) или с использованием классов (ООП).
2. Идея императивного программирования.
* Ответ: Это программирование в «повелительном наклонении». Программа описывает как получить результат, задавая последовательность команд-приказов для компьютера (делай шаг 1, затем шаг 2).
* Ключевые черты: Использование переменных, присваиваний, циклов, изменения состояния памяти.
* Пример:
# Мы говорим компьютеру пошагово, что делать
s = 0
for i in range(5):
s = s + i
3. Идея декларативного программирования.
* Ответ: Это стиль, в котором мы описываем, какой результат хотим получить, а не алгоритм его достижения. Детали реализации скрыты «под капотом» языка или библиотек.
* Ключевые черты: SQL, LINQ, в Python — списочные включения (list comprehension), срезы, работа с numpy.
* Пример (из Лекции 13):
# Мы говорим "дай нам список, где элементы больше 15", не расписывая цикл
B = [el for el in A if el > 15]
# Или в numpy:
B = A[A > 15]
4. Идея структурного программирования.
* Ответ: Парадигма, в которой алгоритм строится из трех базовых управляющих конструкций:
1. Последовательность (команды идут одна за другой).
2. Ветвление (if/else).
3. Цикл (for/while).
* Суть: Отказ от оператора goto (безусловного перехода), что делает код предсказуемым и читаемым. Код организуется в блоки.
5. Идея процедурного программирования.
* Ответ: Подход, при котором программа декомпозируется (разбивается) на подпрограммы (функции/процедуры), которые вызывают друг друга.
* Суть: Позволяет избежать дублирования кода и делает программу модульной. Основная программа — это серия вызовов функций.
* Пример (из Лекции 6):
def fact(n): ...
def sumfact(n): ... # вызывает fact(n)
6. Что такое программирование в стиле однострочников (списочных включений)?
* Ответ: Это использование синтаксических конструкций Python (List Comprehensions, Generator Expressions), позволяющих записывать циклы и условия в одну строку. Это шаг в сторону декларативного стиля.
* Пример:
# Вместо цикла for для создания списка квадратов:
sq = [x**2 for x in range(10) if x % 2 == 0]
7. Понятия объект, класс, экземпляр класса.
* Ответ (из Лекции 7):
* Класс (Class): Чертеж, шаблон или описание сущности. Он определяет, какие данные и методы будут у объектов. (Например, класс Person или Point).
* Объект / Экземпляр класса (Instance): Конкретная реализация класса в памяти. (Например, конкретный человек p1 или точка A).
* Связь: Класс — это общее (имя нарицательное), объект — частное (имя собственное).
8. Понятия атрибут и метод.
* Ответ (из Лекции 7):
* Атрибут: Переменная, привязанная к объекту, хранящая его состояние (данные). Например, self.name, self.x.
* Метод: Функция внутри класса, которая описывает поведение объекта и может работать с его атрибутами. Обязательно принимает self (в большинстве случаев).
* Пример:
class Point:
def input(self): # Метод
self.x = 10 # Атрибут
9. Принцип абстракции.
* Ответ (из Лекции 8): Выделение существенных характеристик объекта для конкретной задачи и отбрасывание несущественных.
* Пример: Для класса Triangle (треугольник) в геометрии важны координаты вершин или длины сторон. Нам не важен цвет линий, толщина или материал, из которого он сделан. Мы абстрагируемся от этого.
10. Принцип инкапсуляции.
* Ответ (из Лекции 8): Объединение данных (атрибутов) и кода, который их обрабатывает (методов), в одну сущность (класс).
* Суть: В Python это означает, что переменные (например, координаты точки) хранятся внутри self, и методы класса знают, как с ними работать. Это защищает данные от некорректного использования извне и скрывает сложность реализации.
11. Агрегация экземпляров классов (составные объекты).
* Ответ (из Лекции 8): Принцип построения сложных объектов из более простых. Отношение «состоит из» (Has-a).
* Пример: Треугольник состоит из трех Точек. Человек состоит из Имени, Фамилии и имеет Отца и Мать (которые тоже являются объектами класса Человек — рекурсивная агрегация).
class Triangle:
def __init__(self, p1, p2, p3):
self.A = p1 # Агрегация (Точка внутри Треугольника)
12. Наследование.
* Ответ (из Лекции 9): Механизм создания нового класса на основе уже существующего. Отношение «является» (Is-a).
* Три идеи наследования:
1. Заимствование: Класс-наследник получает атрибуты и методы родителя.
2. Расширение: Класс-наследник добавляет свои новые атрибуты/методы.
3. Переопределение: Класс-наследник меняет логику работы методов родителя.
* Пример: Student(Person) — студент является человеком, наследует имя, но добавляет год поступления.